package com.fromfuture.xuhuidoc.android.customview;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;

/**
 * Created by hsj on 2017/6/16.
 */

public class RoundImageView extends ImageView {

    private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG);
    private Bitmap mRawBitmap;
    private BitmapShader mShader;
    private Matrix mMatrix = new Matrix();

           public RoundImageView(Context context, AttributeSet attrs) {
            super(context, attrs);
                        }

    @Override
        protected void onDraw(Canvas canvas) {
        Bitmap rawBitmap = getBitmap(getDrawable());
       if (rawBitmap != null){
           int viewWidth = getWidth();
               int viewHeight = getHeight();
               int viewMinSize = Math.min(viewWidth, viewHeight);
               float dstWidth = viewMinSize;
               float dstHeight = viewMinSize;
               if (mShader == null || !rawBitmap.equals(mRawBitmap)){
                 mRawBitmap = rawBitmap;
                  mShader = new BitmapShader(mRawBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
                  }
                 if (mShader != null){
                       mMatrix.setScale(dstWidth / rawBitmap.getWidth(), dstHeight / rawBitmap.getHeight());
                      mShader.setLocalMatrix(mMatrix);
                    }
               mPaintBitmap.setShader(mShader);
               float radius = viewMinSize / 2.0f;
               canvas.drawCircle(radius, radius, radius, mPaintBitmap);
       } else {
              super.onDraw(canvas);
               }
      }

          private Bitmap getBitmap(Drawable drawable){
          if (drawable instanceof BitmapDrawable){
                  return ((BitmapDrawable)drawable).getBitmap();
              } else if (drawable instanceof ColorDrawable){
               Rect rect = drawable.getBounds();
                  int width = rect.right - rect.left;
                    int height = rect.bottom - rect.top;
             int color = ((ColorDrawable)drawable).getColor();
                      Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
                 Canvas canvas = new Canvas(bitmap);
                    canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));
                   return bitmap;
                } else {
                    return null;
                 }
          }

}
